/** * run the program * * @author Bijan Tajmir * */ import java.lang.*; public class TestMovie4 { public static void main(String[] args) { Movie4 muppets = new Movie4("The Muppets Take Mahattan",2001,"Columbia Tristar"); Movie4 mulan = new Movie4("Mulan Special Edition",2004,"Disney"); Movie4 shrek = new Movie4("Shrek 2",2004,"Dreamworks"); Movie4 incredibles = new Movie4("The Incredibles",2004,"Pixar"); Movie4 nanny = new Movie4("Nanny McPhee",2006,"Universal"); Movie4 rabbit = new Movie4("The Curse of Were-Rabbit", 2006,"Aardman"); Movie4 iceage = new Movie4("Ice Age",2002,"20th Century Fox"); Movie4 lilo = new Movie4("Lilo & Stitch",2002,"Disney"); Movie4 robots = new Movie4("Robots",2005,"20th Century Fox"); Movie4 monsters = new Movie4("Monsters Inc.",2001,"Pixar"); Movie4[] movies = new Movie4[] {muppets, mulan, shrek, incredibles, nanny, iceage, lilo, robots, monsters, rabbit}; Movie4[] newmovies = new Movie4[movies.length]; System.out.println("Before Sorting:"); printMovies(movies); System.out.println(); System.out.println("Sorted by Title - ascending:"); sortTitles(movies); printMovies(movies); System.out.println(); System.out.println("Sorted by Year - descending:"); sortYears(movies,0,9); printMovies(movies); System.out.println(); System.out.println("Sorted by Studios:"); sortStudios(movies); printMovies(movies); } public static void printMovies(Movie4[] a) { for(int i = 0; i < a.length; i++) { System.out.println(a[i].toString()); } } public static void sortTitles(Movie4[] a) { if (a.length >= 2) { Movie4[] left = new Movie4[a.length / 2]; Movie4[] right = new Movie4[a.length - a.length / 2]; for (int i = 0; i < left.length; i++) { left[i] = a[i]; } for (int i = 0; i < right.length; i++) { right[i] = a[i + a.length / 2]; } sortTitles(left); sortTitles(right); mergeTitles(a, left, right); } } public static void sortYears(Movie4[] a, int low, int high) { if ( low == high ) { return; } int mid = ( low + high ) / 2; sortYears( a, low, mid ); sortYears( a, mid + 1, high); mergeYears( a, low, mid, high); } public static void sortStudios(Movie4[] a) { if (a.length >= 2) { Movie4[] left = new Movie4[a.length / 2]; Movie4[] right = new Movie4[a.length - a.length / 2]; for (int i = 0; i < left.length; i++) { left[i] = a[i]; } for (int i = 0; i < right.length; i++) { right[i] = a[i + a.length / 2]; } sortStudios(left); sortStudios(right); mergeStudios(a, left, right); } } public static void mergeYears( Movie4[] a, int low, int mid, int high ) { Movie4[] temp = new Movie4[ high - low + 1 ]; int i = low, j = mid + 1, n = 0; while ( i <= mid || j <= high ) { if ( i > mid ) { temp[ n ] = a[ j ]; j++; } else if ( j > high ) { temp[ n ] = a[ i ]; i++; } else if ( a[ i ].getYear() > a[ j ].getYear() ) { temp[ n ] = a[ i ]; i++; } else { temp[ n ] = a[ j ]; j++; } n++; } for ( int k = low ; k <= high ; k++ ) { a[ k ] = temp[ k - low ]; } } public static void mergeTitles(Movie4[] a, Movie4[] left, Movie4[] right) { int c = 0; int d = 0; for (int i = 0; i < a.length; i++) { if (d >= right.length || (c < left.length && (left[c].getTitle()).compareToIgnoreCase(right[d].getTitle()) < 0)) { a[i] = left[c]; c++; } else { a[i] = right[d]; d++; } } } public static void mergeStudios(Movie4[] a, Movie4[] left, Movie4[] right) { int c = 0; int d = 0; for (int i = 0; i < a.length; i++) { if (d >= right.length || (c < left.length && (left[c].getStudio()).compareToIgnoreCase(right[d].getStudio()) < 0)) { a[i] = left[c]; c++; } else { a[i] = right[d]; d++; } } } }